home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 April
/
EnigmA AMIGA RUN 06 (1996)(G.R. Edizioni)(IT)[!][issue 1996-04][Skylink CD V].iso
/
progs
/
editor
/
write-ed
/
rexx
/
pgp.wrx
< prev
next >
Wrap
Text File
|
1995-04-17
|
16KB
|
585 lines
/*
* REXX-Skript für WRITE 3.1776 © 1989 - 1995 by Tim Teulings
*
* $VER: PGP.wrx 1.3 (05-Apr-95) © Tim Teulings
*
* History:
*
* 1.3 removed aother problem with the searchpath, shoud
* work in all cases now [TT]
* 1.2 removed some bugs and added one requester [tom]
* 1.1. addapted to new &rexxvar-feature and fixed some bug
* using files containing spaces (Ram Disk:) [TT]
* 1.0 initial WRITE version [TT]
*
* Sorry, but it was impossible for me to contact the author...
*
*
* original GoldEd-Skript by
*
* Autor: Lunz O. Wolfgang (Luwo)
* <W.LUNZ@link-ba.cl.sub.de>
*
* VER: PGP-GoldEd-Script V0.91 ©Luwo (29.04.1994)
*
*
*/
ADDRESS COMMAND 'STACK 12000' /* PGP ist ziemlich hungrig :) */
lib = 'rexxreqtools.library'
if ~show('l',lib) then call addlib(lib,0,-30,0)
OPTIONS RESULTS /* enable return codes */
OPTIONS FAILAT 6 /* ignore warnings */
SIGNAL ON SYNTAX /* ensure clean exit */
SIGNAL ON ERROR /* trap errors */
/* INITIALISIERUNG VON WRITE */
'GETVAR "_CurrentID"'
ID = RESULT /* GETVAR gibt den ID des aktuellen Fenster zurück, */
/* der von den weiteren Befehlen benötigt wird. */
IF ID=0 THEN DO
MESSAGEOK (Kein Fenster aktiviert !)
EXIT
END
OPENPORT ID /* PrivatePort des aktuellen Fensters öffnen */
Port = RESULT
IF Port="" THEN DO /* 'OPENPORT' gibt "" zurück, wenn Port nicht */
/* geöffnet werden konnte */
LOCKWINDOW ID /* Fenster locken */
END
ELSE DO
INTERPRET ADDRESS Port /* PrivatePort addressieren.Alle Komandos beziehen */
/* sich nun auf das Fenster mit diesem Port */
END
IF Port="" THEN
WRITEPORT="WRITE"
ELSE
WRITEPORT=Port
/* ENDE DER INITIALISIERUNG VON WRITE */
/*********************************************************/
/* Userconfigurierbare Variablen */
/*********************************************************/
USERFILE = 'T:PGP_userIDs.tmp' /* einige Standard-Variablen */
UserPath = 'T:Users'
/*********************************************************/
IDstring = '0x'
NL = '0a'x
CLRSCR = '0c'x
PGP = SEARCHPATH() /* den Pfad aus der PGPPATH-Variablen lesen */
'GETVAR "_FileName"'
DEFAULTFILENAME = RESULT
'GETVAR "_marked"'
IF RESULT=2 THEN
BLOCKMARKIERUNG = "TRUE"
ELSE
BLOCKMARKIERUNG="FALSE"
ORGFILENAME=DEFAULTFILENAME
IF BLOCKMARKIERUNG="TRUE" then
ORGFILENAME=DEFAULTFILENAME'.block'
/* --------- Begin der Verzweigungsroutine ------------------------- */
IF ARG(1)="READ_PGP" then READ_PGP() /* Läuft */
IF ARG(1)="WRITE_PGP" then WRITE_PGP()
IF ARG(1)="ENCODE_normal" then ENCODE_normal()
IF ARG(1)="DECODE_normal" then DECODE_normal()
IF ARG(1)="UNTERSCHREIBEN" then UNTERSCHREIBEN() /* Läuft */
IF ARG(1)="KEY_aufnehmen" then KEY_aufnehmen()
IF ARG(1)="KEY_ansehen" then KEY_ansehen()
IF ARG(1)="KEY_editieren" then KEY_editieren()
IF ARG(1)="KEY_entfernen" then KEY_entfernen()
IF ARG(1)="KEY_beglaubigen" then KEY_beglaubigen()
IF ARG(1)="KEY_anhaengen" then KEY_anhaengen()
IF ARG(1)="KEY_generieren" then KEY_generieren()
/* Kein verfügbarer Parameter ! */
ADDRESS "WRITE"
'MESSAGEOK "PGP-Script-Fehler!\n\nKein Aktion angegeben!"'
REALLYQUIT()
/*----------- Ende der Verzweigungsroutine --------------------------*/
/*-------------------------------------------------------------------*/
READ_PGP: /* PGP analysiert den Text selbständig */
CALL SAVER()
ADDRESS COMMAND PGP || ' +FORCE "' || ORGFILENAME || '" "-o' || ORGFILENAME || '"'
CALL LOADER()
REALLYQUIT('k')
end
/*-------------------------------------------------------------------*/
/*-------------------------------------------------------------------*/
WRITE_PGP: /* Der Text wird für die entsprechenden */
/* Empfänger codiert... */
CALL SAVER()
TITXT = 'Text verschlüsseln...'
BTTXT = '_Ja|_Nein'
BDTXT = 'Wollen sie den Text\nauch unterschreiben?'
call ABFRAGE()
if ergebnis=1 then
signcmd=' -tea '
else
signcmd=' -teas '
REQTITEL="Wählen sie die Empfänger.."
empfaengerliste = GETEMPFAENGER()
if empfaengerliste ~= '' then
do
ADDRESS COMMAND
PGP SIGNCMD '+FORCE "' || ORGFILENAME || '"' EMPFAENGERLISTE
'c:copy >nil: "' || ORGFILENAME'.asc" "' || ORGFILENAME || '"'
'c:delete >nil: "'ORGFILENAME'.asc"'
end
CALL LOADER()
REALLYQUIT()
end
/*-------------------------------------------------------------------*/
/*-------------------------------------------------------------------*/
ENCODE_normal: /* Der Text wird mit einem Mantra verschlüsselt */
CALL SAVER()
ADDRESS COMMAND
PGP '-cta "' || ORGFILENAME || '"'
'c:copy >nil: "' || ORGFILENAME'.asc" "' || ORGFILENAME || '"'
'c:delete >nil: || "'ORGFILENAME'.asc"'
CALL LOADER() /* 'OPEN AGAIN' */
REALLYQUIT()
end
/*-------------------------------------------------------------------*/
/*-------------------------------------------------------------------*/
DECODE_normal: /* Der Text wird mit einem Mantra entschlüsselt */
CALL SAVER()
ADDRESS COMMAND
PGP '-d +FORCE "' || ORGFILENAME || '" "-o' ORGFILENAME || '"'
CALL LOADER()
REALLYQUIT()
end
/*-------------------------------------------------------------------*/
/*-------------------------------------------------------------------*/
UNTERSCHREIBEN: /* Der Text wird mit der persönlichen Signatur */
/* unterschrieben, und ggfs. komprimiert */
TITXT = 'Text unterschreiben...'
BTTXT = '_Ja|_Nein'
BDTXT = 'Wollen sie den Text\nauch komprimieren?'
call ABFRAGE()
if ergebnis=1 then
signcmd=' -sat +clearsig=on '
else
signcmd=' -sat +clearsig=off '
CALL SAVER()
ADDRESS COMMAND
PGP SIGNCMD || '"' || ORGFILENAME || '"'
'C:copy >nil: "' || ORGFILENAME'.asc" "' || ORGFILENAME || '"'
'c:delete >nil: "' || ORGFILENAME|| '.asc"'
CALL LOADER()
REALLYQUIT()
end
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
KEY_aufnehmen:
CALL SAVER()
ADDRESS COMMAND
PGP '-ka "' || ORGFILENAME || '"'
if exists(USERFILE) then
'c:delete >nil: "'USERFILE || '"'
CALL LOADER()
REALLYQUIT('key')
end
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
KEY_ansehen:
REQTITEL="Welchen Key ansehen?..."
empfaengerliste = GETEMPFAENGER()
if empfaengerliste ~= '' then
do
ADDRESS COMMAND
PGP '-kvvc '|| empfaengerliste
REALLYQUIT('key')
end
REALLYQUIT()
end
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
KEY_editieren:
REQTITEL="Welchen Key editieren?..."
empfaengerliste = GETEMPFAENGER()
if empfaengerliste ~= '' then
do
ADDRESS COMMAND
PGP '-ke '|| empfaengerliste
REALLYQUIT('key')
end
REALLYQUIT()
end
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
KEY_entfernen:
REQTITEL="Welchen Key entfernen?..."
empfaengerliste = GETEMPFAENGER()
if empfaengerliste ~= '' then
do
INTERPRET ADDRESS WRITEPORT
TITXT = 'Public-keys entfernen?'
BTTXT = '_Nein|_Ja'
BDTXT = Namensliste
call ABFRAGE()
if ergebnis =0 then
do
ADDRESS COMMAND
PGP '-kr ' empfaengerliste
'c:delete >nil: 'USERFILE' T:users ALL'
REALLYQUIT('key')
end
end
REALLYQUIT()
end
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
KEY_beglaubigen:
REQTITEL="Welchen Key beglaubigen?..."
empfaengerliste = GETEMPFAENGER()
if empfaengerliste ~= '' then
do
ADDRESS COMMAND
PGP '-ks '|| empfaengerliste
REALLYQUIT('key')
end
REALLYQUIT()
end
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
KEY_anhaengen:
REQTITEL="RADIX-64-Key einfügen..."
empfaengerliste = GETEMPFAENGER()
if empfaengerliste ~= '' then
do
do i = 1 to words(empfaengerliste)
ADDRESS COMMAND
PGP '-fkxa 'word(empfaengerliste,i) ' >t:PGPextract.tmp'i
end
INTERPRET ADDRESS WRITEPORT
'GETVAR "_yPos"'
LIN = RESULT
'GETVAR "_xPos"'
COL = RESULT
BDTXT="Wo wollen Sie den(die)\nRADIX-64 (ASCII)\nPublicKey(s) einfügen?"
TITXT="Radix-64 Public-Key insert:"
BTTXT="_Cursor|Text_ende|_Vergiß es!"
CALL ABFRAGE()
if ERGEBNIS ~= 2 then
do i = 1 to words(empfaengerliste)
'LOADBUFFER "t:PGPextract.tmp&i&" "0"'
if ERGEBNIS=0 THEN
'GOTO 1 @CURSOR INSERTBLOCK "0"'
if ERGEBNIS=1 THEN
'GOTO 1 @EOT INSERTBLOCK "0"'
end
GOTO LIN COL
address command 'c:delete >nil: t:PGPextract.tmp#?'
end
REALLYQUIT()
end
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
KEY_generieren:
TITXT = 'Secret-key generieren?'
BTTXT = '_Nein|_Ja'
BDTXT = 'Wollen Sie tatsächlich\neinen geheimen Schlüssel\ngenerieren?'
call ABFRAGE()
if ergebnis =0 then
do
ADDRESS COMMAND
PGP '-kg '
'c:delete >nil: 'USERFILE
REALLYQUIT('key')
end
REALLYQUIT()
end
/*--------------------------------------------------------------------*/
/* ---------------- Auswahl der Empfaenger--------------------------- */
GETEMPFAENGER:
ADDRESS COMMAND
drop empfaengerliste
PGPcmd = ''
namensliste= ''
/* ist der T:user-Path schon da? */
if ~EXISTS(UserPath) then 'C:makedir ' USERPATH
/* sind die UserIds schon extrahiert? */
if ~EXISTS(USERFILE) then call MAKEUSERLISTE()
call rtfilerequest("T:Users/", , REQTITEL, ,"rtfi_flags=freqf_multiselect rt_pubscrname=WORKBENCH",empfaenger)
if empfaenger == 1 then
do
do i=1 to empfaenger.count
call Open('USID',empfaenger.i,"R")
dummy = readch('USID',8)
call Close('USID')
if left(dummy,2)="0x" then
do
PGPcmd=PGPcmd dummy
namensliste =namensliste right(empfaenger.i,length(empfaenger.i)-8) '|'
end
end
end
call rtfreefilebuffer()
return PGPcmd
/*--------------------------------------------------------------------*/
/* Erstellen der aus der pubring.key-datei extrahierten User Ids */
MAKEUSERLISTE:
ADDRESS COMMAND PGP ' -kv >'USERFILE
call Open('UFID',USERFILE,'R')
do until EOF('UFID')=1
dummy = READLN('UFID')
if (UPPER(LEFT(dummy,3))="PUB")&(word(dummy,4)~='***') then
do
keyid = right(word(dummy,2),6)
namestart= wordindex(dummy,4)
nameend= pos('<',dummy)
if nameend=0 then nameend=LENGTH(dummy)+2
namelength=nameend-namestart-1
name=substr(dummy,namestart,namelength)
name=compress(name,':;/><')
call Open('currentUser',UserPath'/'name,'W')
call Writech('currentUser',IDSTRING||KEYID)
call Close('currentUser')
end
end
call Close('UFID')
say Clrscr
return
/*--------------------------------------------------------------------*/
/* ------------------- diverse Unterprogramme ----------------------- */
SAVER: /* Speichert, je nachdem, ob die Blockmarkierung */
/* aktiviert wurde oder nicht, den ganzen Text, */
/* oder nur einen Ausschnitt daraus ab... */
INTERPRET ADDRESS WRITEPORT
if BLOCKMARKIERUNG="FALSE" then
do
'SAVE _FileName'
return 0
end
if BLOCKMARKIERUNG="TRUE" then
do
'COPYBLOCK "0"'
'SAVEBUFFER &ORGFILENAME "0"'
CLEARBUFFER
return 0
end
end
/*--------------------------------------------------------------------*/
LOADER: /* Lädt, je nachdem, ob die Blockmarkierung aktiviert */
/* wurde oder nicht, den ganzen Text, oder auch nur */
/* einen Block wieder ein... */
INTERPRET ADDRESS WRITEPORT
if BLOCKMARKIERUNG="FALSE" then
do
'OPEN _FileName'
return 0
end
if BLOCKMARKIERUNG="TRUE" then
do
'DELETEBLOCK'
'LOADBUFFER &ORGFILENAME "0"'
'INSERTBLOCK "0"'
ADDRESS COMMAND 'c:delete >nil: 'ORGFILENAME
return 0
end
end
/*--------------------------------------------------------------------*/
SEARCHPATH:
ADDRESS COMMAND
if exists('env:PGPPATH') then
do
call Open('binpath','ENV:PGPPATH','R')
pgp=readln('binpath')
call Close('binpath')
IF right(pgp,1)~=':' THEN
pgp=pgp || '/'
pgp=pgp || "PGP"
if ~exists(pgp) then
pgp="PGP"
end
else
do
INTERPRET ADDRESS WRITEPORT
TITXT = 'PGP-AREXX-INTERNAL-ERROR'
BTTXT = '_OKIDOKI'
BDTXT = "Die PGPPATH-Variable ist nicht gesetzt!\nBitte deklarieren sie diese!|\nVorläufig wird 'C:PGP' verwendet"
call ABFRAGE()
return 'c:pgp'
end
ADDRESS COMMAND
return PGP
end
/*--------------------------------------------------------------------*/
ABFRAGE: /* Erstellt einen Requester... */
INTERPRET ADDRESS WRITEPORT
'ASK "&TITXT&\n\n&BDTXT&" &BTTXT'
ERGEBNIS = RESULT
return 0
end
/*--------------------------------------------------------------------*/
REALLYQUIT:
INTERPRET ADDRESS WRITEPORT
arg QUITTER
if QUITTER~=''then
do
say NL 'Bitte "Return" um weiterzumachen'
pull QUITTER
end
'SETVAR "_FileName" &DEFAULTFILENAME'
/* Schließen des Ports/Unlocken des Fensters */
IF Port="" THEN DO
LOCKWINDOW 0
END
ELSE DO
CLOSEPORT ID
END
EXIT
/*--------------------------------------------------------------------*/
ERROR:
say NL 'Ein Fehler ('RC') ist in Zeile:'SIGL' aufgetreten :~('
say '-=> [Press return]'
pull QUITTER
INTERPRET ADDRESS WRITEPORT
'SETVAR "_FileName" &DEFAULTFILENAME'
/* Schließen des Ports/Unlocken des Fensters */
IF Port="" THEN DO
LOCKWINDOW 0
END
ELSE DO
CLOSEPORT ID
END
EXIT
/*--------------------------------------------------------------------*/
SYNTAX:
INTERPRET ADDRESS WRITEPORT
SAY "Sorry, Syntax-error line" SIGL ":" ERRORTEXT(RC) ":-("
/* Schließen des Ports/Unlocken des Fensters */
IF Port="" THEN DO
LOCKWINDOW 0
END
ELSE DO
CLOSEPORT ID
END
EXIT
/*--------------------------------------------------------------------*/